package semantico;

import java.util.ArrayList;

public class FuncaoExecutar extends Codigo {

	Identificador identificadorFuncao;
	ArrayList<Expressao> parametrosFuncao;
	
	public FuncaoExecutar(Identificador identificadorFuncao, ArrayList<Expressao> parametrosFuncao){
		super();
		this.identificadorFuncao = identificadorFuncao;
		this.parametrosFuncao = parametrosFuncao;
	}
	
	/**
	 * Gera codigo de tres enderecos
	 * @param inicio - marca o inicio do codigo para o comando.
	 * @param primeiraInstrucaoApos - marca a primeira instrucao apos o codigo do comando.
	 * @throws SemanticoException 
	 */
	public void gerar(int inicio, int primeiraInstrucaoApos) throws SemanticoException{ //chamado com rotulos begin e after
		
		if (parametrosFuncao.size() > 0) {
			for (Expressao expressao : parametrosFuncao) {
				emitirCodigo("param " + expressao.toString());
			}
			emitirCodigo("rt (" + "call " + identificadorFuncao.toString() + ", " + parametrosFuncao.size() + ")");
		}else{
			emitirCodigo("rt (" + "call " + identificadorFuncao.toString() + ", 0)");
		}
	}
}